iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

設計模式系列 第 10

Day10 - 外觀模式(Facade pattern)

  • 分享至 

  • xImage
  •  

介紹
外觀模式將一系列的操作藏在介面後,方便用戶統一操作。

舉個例子: 到家後會開電燈、開電視、開冷氣。出門前會關冷氣、關電視、關電燈。每天進出門要按那麼多按鈕,不如將這些操作編進遙控器的ON、OFF按鈕,進門後按On按鈕電器全開,出門前按Off按鈕電器全關。

C++範例

#include <iostream>

class Light
{
public:
    void LightOn()
    {
        std::cout << "Light is on" << std::endl;
    }

    void LightOff()
    {
        std::cout << "Light is off" << std::endl;
    }
};

class TV
{
public:
    void TVOn()
    {
        std::cout << "TV is on" << std::endl;
    }

    void TVOff()
    {
        std::cout << "TV is off" << std::endl;
    }
};

class AirConditioner
{
public:
    void ACOn()
    {
        std::cout << "Air conditioner is on" << std::endl;
    }

    void ACOff()
    {
        std::cout << "Air conditioner if off" << std::endl;
    }
};

class HouseFacade
{
public:
    HouseFacade() {}

    void AllOn()
    {
        m_light.LightOn();
        m_tv.TVOn();
        m_ac.ACOn();
    }

    void AllOff()
    {
        m_light.LightOff();
        m_tv.TVOff();
        m_ac.ACOff();
    }

private:
    Light m_light;
    TV m_tv;
    AirConditioner m_ac;
};

int main()
{
    HouseFacade hf;

    // 出門前,關閉電器
    hf.AllOff();

    // 在外...
    //

    // 到家後,開啟電器
    hf.AllOn();

    return 0;
}

Output:

Light is off
TV is off
Air conditioner if off
Light is on
TV is on
Air conditioner is on

上一篇
Day9 - 橋接模式(Bridge pattern)
下一篇
Day11 - 組合模式(Composite pattern)
系列文
設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言